Skip to main content

02 调试与常见问题

1 ⭐️先确认程序走到了哪里​

“灯不亮”和“程序没运行”不是同一个问题。我们可以在main入口、外设初始化之后、主循环三个位置设置断点,先确认停在哪一步,再去查电路。

现象检查顺序
ST-Link找不到芯片板上3.3 V → 共地 → SWDIO/PA13与SWCLK/PA14 → 下载接口选SWD
程序下载后不运行复位 → main断点 → 看看程序停留在哪里
重新生成代码后功能消失用户代码是否放在USER CODE区域,在生成代码前是否保存
一进中断就不再返回中断源是否真的在工作、中断是否使能

2 ➡️volatile解决什么​

我们在实验中通常通过设立标志位的方式,也就是通过一个简单的变量

  • 中断会修改、主循环会读取的简单标志
  • 内核有时会将变量缓存到内核里,当再次用到这个变量的时候,内核就不用去RAM里面读
  • 为了不让内核偷懒,真真实实地去访问RAM里地变量,通常应声明为 volatile

3 看波形,才知道外设有没有工作​

GPIO先用万用表测静态电平;定时器、UART、IIC用示波器或逻辑分析仪看时序。仪器与开发板共地,先确认电压量程。

  • PWM:量周期和高电平时间,分别对应频率和占空比;
  • UART:确认空闲为高、波特率和数据帧格式,再看字节;
  • IIC:看空闲高电平、START、地址和第9位ACK;
  • ADC:先接一个已知直流电压,再接复杂传感器;